/*
 * @lc app=leetcode id=832 lang=javascript
 *
 * [832] Flipping an Image
 *
 * https://leetcode.com/problems/flipping-an-image/description/
 *
 * algorithms
 * Easy (71.88%)
 * Total Accepted:    82.3K
 * Total Submissions: 114.5K
 * Testcase Example:  '[[1,1,0],[1,0,1],[0,0,0]]'
 *
 * Given a binary matrix A, we want to flip the image horizontally, then invert
 * it, and return the resulting image.
 * 
 * To flip an image horizontally means that each row of the image is reversed.
 * For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].
 * 
 * To invert an image means that each 0 is replaced by 1, and each 1 is
 * replaced by 0. For example, inverting [0, 1, 1] results in [1, 0, 0].
 * 
 * Example 1:
 * 
 * 
 * Input: [[1,1,0],[1,0,1],[0,0,0]]
 * Output: [[1,0,0],[0,1,0],[1,1,1]]
 * Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
 * Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
 * 
 * 
 * Example 2:
 * 
 * 
 * Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
 * Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
 * Explanation: First reverse each row:
 * [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
 * Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
 * 
 * 
 * Notes:
 * 
 * 
 * 1 <= A.length = A[0].length <= 20
 * 0 <= A[i][j] <= 1
 * 
 * 
 */
/**
 * @param {number[][]} A
 * @return {number[][]}
 */
console.time("耗时");
let array = [[1, 1, 0, 0], [1, 0, 0, 1], [0, 1, 1, 1], [1, 0, 1, 0]]
var flipAndInvertImage = function (A) {
    // 第一种解决方案
    // let newArray = [];
    // for (let i = 0; i < A.length; i++) {
    //     let revea = A[i].reverse(), atearray = [];
    //     for (let o = 0; o < revea.length; o++) {
    //         if (revea[o] === 0) {
    //             revea[o] = 1
    //         } else { revea[o] = 0 }
    //         atearray.push(revea[o]);
    //     }
    //      newArray.push(atearray);
    // }
    // return newArray;

    // 第二种解决方案
    A.forEach(p => {
        p.reverse().forEach((v, i) => {
            v ? p[i] = 0 : p[i] = 1;
        })
    })
    return A;

    // 第三种解决方案
    return A.map(a => a.reverse().map(i => i ^= 1))
};
console.log(flipAndInvertImage(array));
console.timeEnd("耗时");

// let aa = 10; b = 25;
// b ^= aa;
//     //  000001010
//     //  000011001
//     //      10011
// console.log(b);



